'-> Mattonite by Stefano Regattin
'i> 2 ottobre 1996 
'm> 3,8,12,13,14,19,25,27,31 ottobre 1996
'm> 9 novembre 1996
'm> 12 novembre 1997 
'm> 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 maggio 2000 
'm> 1,4,5,6,7,8,9,11,13,14,23,26,27,28 giugno 2000 
'm> 16,17,18,19,23,24 luglio 2000
'm> 5,12,13,14,15,30 agosto 2000 
'm> 1,10,11,26 settembre 2000
'm> 12,15,24,25,26,31 ottobre 2000 
'm> 2,16,17,21,23 novembre 2000
'm> 3 dicembre 2000
'------------------- 
Set Buffer 10
FALSO=0
VERO=-1
OGGETTI$="MattoniteOggetti.Abk"
SUONI$="MattoniteSuoni.Abk"
BANCO=65535
C0LOREARCOBALENO=0
LARGHEZZAPANNELLO=48
LIVELLO=0
MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO=8
MASSIMOPALLINEINCAMPO=5
MATTONCINIDARIDISEGNARE=50
OGGETTOCENTRODELLABARRA=248
OGGETTOLATIDELLABARRA=249
OGGETTOLASER=250
OGGETTORAGGIOLASER=254
PRIMAPARTITA=VERO
PUNTEGGIOMASSIMO=2500
RAGGIOLASERRIFLESSO=FALSO
Dim GIOCATORE$(99)
Dim C0LOREFINALE(31),DELTAXPALLINA(MASSIMOPALLINEINCAMPO-1)
Dim DELTAYPALLINA(MASSIMOPALLINEINCAMPO-1)
Dim DURATARIGA(2),INGOMBRODELLABARRA(2),MATTONCINO(246)
Dim MATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
Dim PALLINA(MASSIMOPALLINEINCAMPO-1)
Dim PALLINAINCOLLATA(MASSIMOPALLINEINCAMPO-1),PUNTEGGIO(99)
Dim RIDISEGNODELMATTONCINO(2,MATTONCINIDARIDISEGNARE-1)
Dim RIMBALZODELLAPALLINAAILATIDELLABARRA(MASSIMOPALLINEINCAMPO-1)
Dim SUONODAESEGUIRE(3),VELOCITADELLAPALLINA(MASSIMOPALLINEINCAMPO-1)
Dim XCOLLA(MASSIMOPALLINEINCAMPO-1),X0ZONA(246)
Dim XMATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
Dim XPALLINA(MASSIMOPALLINEINCAMPO-1),YCOLLA(MASSIMOPALLINEINCAMPO-1)
Dim Y0ZONA(246),YMATTONCINODIPOTENZIAMENTO(MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1)
Dim YPALLINA(MASSIMOPALLINEINCAMPO-1)
Global FALSO,VERO
Global OGGETTI$,PERCORSO$,PERCORSODEILIVELLI$,PERCORSODELLAGRAFICA$
Global PERCORSODELLAMUSICA$,SUONI$
Global ALTEZZAFONT,BANCO,BONUS,C0LLA,C0LOREARCOBALENO,DURATARIGA
Global IMMAGINEPALLINA,LARGHEZZAPANNELLO,LASER,LIMITEYPALLINA,LIVELLO
Global LUNGHEZZADELLABARRA,LUNGHEZZADELLABARRACAMBIATA,MATTONCINI
Global MATTONCINIDARIDISEGNARE,MATTONCINIDIPOTENZIAMENTO
Global MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO,MASSIMOPALLINEINCAMPO
Global OGGETTOCENTRODELLABARRA,OGGETTOLATIDELLABARRA,OGGETTOLASER
Global OGGETTORAGGIOLASER,OGGETTORIGAUNO,OGGETTORIGADUE,OGGETTORIGATRE,PALLINE
Global PALLINEINCAMPO,PALLINEINCAMPOALLINIZIO,PUNTEGGIO,PUNTEGGIOMASSIMO
Global RAGGIOLASERSPARATO,RIGA,RIMBALZODELLEPALLINESUIMATTONCINI,T0GLILARIGA
Global XBARRA,YBARRA,XFINALERIGA,XRIGA
Global GIOCATORE$()
Global C0LOREFINALE(),DELTAXPALLINA(),DELTAYPALLINA(),DURATARIGA()
Global INGOMBRODELLABARRA(),MATTONCINO(),MATTONCINODIPOTENZIAMENTO(),PALLINA()
Global PALLINAINCOLLATA(),PUNTEGGIO(),RIDISEGNODELMATTONCINO()
Global RIMBALZODELLAPALLINAAILATIDELLABARRA(),SUONODAESEGUIRE()
Global VELOCITADELLAPALLINA(),X0ZONA(),XCOLLA(),XMATTONCINODIPOTENZIAMENTO()
Global XPALLINA(),Y0ZONA(),YCOLLA(),YMATTONCINODIPOTENZIAMENTO(),YPALLINA()
Proc IMPOSTALOSCHERMO
Proc DISSOLVENZADEICOLORI[$FFF,0,0]
Limit Mouse 
Screen Hide 0
Proc TROVAILFONTDATA70
Proc IMPOSTALARCOBALENO
Proc IMPOSTALEZONE
Proc INDIVIDUALAPOSIZIONEDELPROGRAMMA
Proc IMPOSTAIPERCORSIDEIFILE
Proc CARICAGLIOGGETTI
Proc CARICAISUONI
Proc IMPOSTAICOLORI
Proc DISSOLVENZADEICOLORI[$FFF,0,0]
Proc IMPOSTAILMODODIRIDISEGNODEGLIOGGETTI
Proc IMPOSTAGLIOGGETTIPERLERIGHE
Proc CREALERIGHE
Proc IMPOSTALADURATADELLERIGHE
Proc IMPOSTALINGOMBRODELLABARRA
Hide 
Screen Show 0
Proc CARICAILLIVELLO
Proc DABANCOAVARIABILI
Proc MOSTRAILPANNELLO
Proc MOSTRAIMATTONCINI
Proc DISSOLVENZADEICOLORI[0,1,2]
Proc IMPOSTAILAMPEGGI
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,VERO]
TESTOINTRODUTTIVO$="Press left mouse button to play..."+Chr$(10)
TESTOINTRODUTTIVO$=TESTOINTRODUTTIVO$+"Press right mouse button or Esc key to quit..."+Chr$(10)
TESTOINTRODUTTIVO$=TESTOINTRODUTTIVO$+"Press the Esc key during the game"+Chr$(10)
TESTOINTRODUTTIVO$=TESTOINTRODUTTIVO$+"to end the game..."
Do 
 Proc MOSTRAIPUNTEGGIDEIGIOCATORI
 Proc _ASPETTA[250]
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[TESTOINTRODUTTIVO$,21,0,ALTEZZAFONT,FALSO]
 Proc _ASPETTA[500]
 Exit If TASTO=-2 or TASTO=27
 If TASTO=-1
  LASER=0
  LIVELLO=0
  LUNGHEZZADELLABARRA=1
  LUNGHEZZADELLABARRACAMBIATA=1
  NUOVOLIVELLO=VERO
  PALLINE=5
  PALLINEINCAMPO=1
  PALLINEINCAMPOALLINIZIO=PALLINEINCAMPO
  PUNTEGGIO=0
  RIMBALZODELLEPALLINESUIMATTONCINI=VERO
  XBARRA=X Screen(X Mouse)
  YBARRA=247
  LIMITEYPALLINA=YBARRA-4
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,FALSO]
  If PRIMAPARTITA=FALSO or LIVELLO>0
   Proc CANCELLATUTTIIMATTONCINI
   Proc CARICAILLIVELLO
   Proc DABANCOAVARIABILI
  End If 
  PRIMAPARTITA=FALSO
  Proc CONTAIMATTONCINI
  Proc MOSTRAIMATTONCINI
  Proc METTILEPALLINESULLABARRA
  Proc IMPOSTALEVELOCITADELLEPALLINE
  Repeat 
   Proc MOSTRALEPALLINERIMASTE
   Proc MOSTRAILLIVELLO
   Proc MOSTRAILBONUS[VERO]
   Proc MOSTRAILPUNTEGGIO[VERO]
   Proc MOSTRAILPUNTEGGIOMASSIMO[VERO]
   Proc IMPOSTAICANALIDELSUONODAESEGUIRE
   If NUOVOLIVELLO=VERO
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["Get ready for level"+Str$(LIVELLO)+"!"+Chr$(10)+"Press a (mouse) key to begin play...",22,0,ALTEZZAFONT,VERO]
    Proc _ASPETTA[500]
    Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,FALSO]
   End If 
   If XBARRA>0
    X Mouse=X Hard(XBARRA)
   End If 
   For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
    If PALLINA<PALLINEINCAMPOALLINIZIO
     PALLINA(PALLINA)=VERO
    Else 
     PALLINA(PALLINA)=FALSO
    End If 
   Next PALLINA
   Repeat 
    Proc LIMITAIMOVIMENTIDELLABARRA
    TASTODELTOPOCLICCATO=Mouse Click
    TASTOPREMUTO$=Inkey$
    TASTIERA=Scancode
    If TASTOPREMUTO$=Chr$(27)
     PALLINE=0 : Exit 2
    End If 
    If TASTOPREMUTO$=" "
     Proc MATTONCINIDIPOTENZIAMENTO[Rnd(18)-19,0]
    End If 
    If TASTIERA=80
     Add LUNGHEZZADELLABARRACAMBIATA,1,0 To 2
    Else If TASTIERA=81
     Add LASER,1,0 To 3
    Else If TASTIERA=82
     Add PALLINEINCAMPOALLINIZIO,1,1 To 5
     For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
      If PALLINA<PALLINEINCAMPOALLINIZIO
       PALLINA(PALLINA)=VERO
      Else 
       PALLINA(PALLINA)=FALSO
      End If 
     Next PALLINA
    Else If TASTIERA=83
     C0LLA= Not C0LLA
    Else If TASTIERA=84
     Add RIGA,1,0 To 3
     If RIGA>1
      T0GLILARIGA=RIGA-1
     Else If RIGA=0
      T0GLILARIGA=3
     End If 
    Else If TASTIERA=85
     RIMBALZODELLEPALLINESUIMATTONCINI= Not RIMBALZODELLEPALLINESUIMATTONCINI
    Else If TASTIERA=89
     If RIGA>0
      For XRIGA=XRIGA To 0 Step -1
       Proc T0GLILARIGA : Wait Vbl 
      Next XRIGA
      RIGA=0
     End If 
     Proc CANCELLALEPALLINE
     Proc METTILEPALLINESULLABARRA
     Proc CANCELLATUTTIIMATTONCINI
     Proc CANCELLAILRAGGIOLASER
     Inc LIVELLO
     Proc CARICAILLIVELLO
     Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,VERO]
     Exit If LIVELLO=-1,2
     Proc DABANCOAVARIABILI
     Ink 0 : Bar 0,0 To 271,211
     Proc MOSTRAIMATTONCINI
     Proc CONTAIMATTONCINI
     Proc MOSTRAILLIVELLO
     Proc MOSTRAILBONUS[VERO]
     NUOVOLIVELLO=VERO
    End If 
    XBARRA=X Screen(X Mouse)
    Proc CAMBIALALUNGHEZZADELLABARRA
    If LUNGHEZZADELLABARRA=0
     Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,5
     Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,6
    Else If LUNGHEZZADELLABARRA=1
     Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,1
     Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,2
    Else If LUNGHEZZADELLABARRA=2
     Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,3
     Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,4
    End If 
    If LASER>0
     Bob OGGETTOLASER,XBARRA,YBARRA,6+LASER
    Else 
     Bob Off OGGETTOLASER
    End If 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     FANTASMAPALLINA=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO+PALLINA
     If PALLINA(PALLINA)=VERO
      Bob FANTASMAPALLINA,XBARRA-14+PALLINA*7,LIMITEYPALLINA,IMMAGINEPALLINA
     Else 
      Bob Off FANTASMAPALLINA
     End If 
    Next PALLINA
    Proc MATTONCINIDIPOTENZIAMENTO[0,0]
    If RIGA>0
     If T0GLILARIGA>0
      If RIGA>1 and XRIGA>0
       Dec XRIGA : Proc T0GLILARIGA
       If XRIGA=0
        T0GLILARIGA=0
       End If 
      End If 
     Else 
      If XRIGA<XFINALERIGA
       Inc XRIGA : Proc METTILARIGA
      End If 
     End If 
    Else 
     If XRIGA>0 and T0GLILARIGA=3
      Dec XRIGA : Proc T0GLILARIGA
      If XRIGA=0
       T0GLILARIGA=0
      End If 
     End If 
    End If 
    If NUOVOLIVELLO=VERO
     If INIZIOGIOCOSUONATO=FALSO
      Sam Play SUONODAESEGUIRE(0),1 : Proc SUONODAESEGUIRE
      Wait 20 : Sam Play SUONODAESEGUIRE(0),1 : Proc SUONODAESEGUIRE
      INIZIOGIOCOSUONATO=VERO
     End If 
     NUOVOLIVELLO=FALSO
    End If 
    Bob Update : Wait Vbl 
   Until TASTODELTOPOCLICCATO>0
   For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
    If PALLINA(PALLINA)=VERO
     FANTASMAPALLINA=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO+PALLINA
     XPALLINA(PALLINA)=X Bob(FANTASMAPALLINA)
     YPALLINA(PALLINA)=Y Bob(FANTASMAPALLINA)
     D1REZIONEPALLINA=Rnd(1)
     If D1REZIONEPALLINA=0
      DELTAXPALLINA(PALLINA)=2
     Else 
      DELTAXPALLINA(PALLINA)=-2
     End If 
     DELTAYPALLINA(PALLINA)=-VELOCITADELLAPALLINA(PALLINA)
    End If 
    RIMBALZODELLAPALLINAAILATIDELLABARRA(PALLINA)=FALSO
   Next PALLINA
   PALLINEINCAMPO=PALLINEINCAMPOALLINIZIO
   Do 
    TASTODELTOPOCLICCATO=Mouse Click
    TASTOPREMUTO$=Inkey$
    If TASTOPREMUTO$=Chr$(27)
     PALLINE=0 : Exit 
    End If 
    For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
     If PALLINA(PALLINA)=VERO
      If TASTODELTOPOCLICCATO=1
       For P=0 To MASSIMOPALLINEINCAMPO-1
        If PALLINA(P)=VERO and PALLINAINCOLLATA(P)=VERO
         YPALLINA(P)=LIMITEYPALLINA
         PALLINAINCOLLATA(P)=FALSO
        End If 
       Next P
      End If 
      If C0LLA=FALSO
       PALLINAINCOLLATA(PALLINA)=FALSO
      End If 
      If PALLINAINCOLLATA(PALLINA)=VERO
       XPALLINA(PALLINA)=XBARRA+XCOLLA(PALLINA)
       YPALLINA(PALLINA)=YBARRA+YCOLLA(PALLINA)
      Else 
       Add XPALLINA(PALLINA),DELTAXPALLINA(PALLINA)
       Add YPALLINA(PALLINA),DELTAYPALLINA(PALLINA)
       If TILTPALLINA=VERO
        Add XPALLINA(PALLINA),XTILTPALLINA
        Add YPALLINA(PALLINA),YTILTPALLINA
       End If 
      End If 
      FANTASMAPALLINA=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO+PALLINA
      If PALLINAINCOLLATA(PALLINA)=FALSO
       If Bob Col(FANTASMAPALLINA,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
        OGGETTO=Col(-1)
        If OGGETTO=OGGETTOCENTRODELLABARRA and YPALLINA(PALLINA)>YBARRA
         If C0LLA=VERO
          XCOLLA(PALLINA)=XPALLINA(PALLINA)-XBARRA : YCOLLA(PALLINA)=-4
          PALLINAINCOLLATA(PALLINA)=VERO
         End If 
         If RIMBALZODELLAPALLINAAILATIDELLABARRA(PALLINA)=VERO
          DELTAXPALLINA(PALLINA)=VELOCITADELLAPALLINA(PALLINA)*Sgn(DELTAXPALLINA(PALLINA))
          DELTAYPALLINA(PALLINA)=-VELOCITADELLAPALLINA(PALLINA)
          RIMBALZODELLAPALLINAAILATIDELLABARRA(PALLINA)=FALSO
         Else 
          DELTAYPALLINA(PALLINA)=-VELOCITADELLAPALLINA(PALLINA)
         End If 
         YPALLINA(PALLINA)=LIMITEYPALLINA
         Sam Play SUONODAESEGUIRE(0),2 : Proc SUONODAESEGUIRE
        Else If OGGETTO=OGGETTOLATIDELLABARRA and YPALLINA(PALLINA)>YBARRA+2
         If C0LLA=VERO
          XCOLLA(PALLINA)=XPALLINA(PALLINA)-XBARRA : YCOLLA(PALLINA)=-2
          PALLINAINCOLLATA(PALLINA)=VERO
         End If 
         If RIMBALZODELLAPALLINAAILATIDELLABARRA(PALLINA)=FALSO
          DELTAXPALLINA(PALLINA)=VELOCITADELLAPALLINA(PALLINA)*2*Sgn(DELTAXPALLINA(PALLINA))
          DELTAYPALLINA(PALLINA)=-Max(VELOCITADELLAPALLINA(PALLINA)/2,1)
          RIMBALZODELLAPALLINAAILATIDELLABARRA(PALLINA)=VERO
         Else 
          DELTAYPALLINA(PALLINA)=-Max(VELOCITADELLAPALLINA(PALLINA)/2,1)
         End If 
         Sam Play SUONODAESEGUIRE(0),2,4181 : Proc SUONODAESEGUIRE
        End If 
       End If 
      End If 
      If XPALLINA(PALLINA)<3
       XPALLINA(PALLINA)=3 : DELTAXPALLINA(PALLINA)=-DELTAXPALLINA(PALLINA)
      End If 
      If XPALLINA(PALLINA)>268
       XPALLINA(PALLINA)=268 : DELTAXPALLINA(PALLINA)=-DELTAXPALLINA(PALLINA)
      End If 
      If YPALLINA(PALLINA)<3
       YPALLINA(PALLINA)=3 : DELTAYPALLINA(PALLINA)=-DELTAYPALLINA(PALLINA)
      End If 
      Bob FANTASMAPALLINA,XPALLINA(PALLINA),YPALLINA(PALLINA),IMMAGINEPALLINA
      MATTONCINOELIMINATODALLEPALLINE=FALSO
      MATTONCINO=Zone(XPALLINA(PALLINA),YPALLINA(PALLINA))
      If MATTONCINO>0
       If MATTONCINO(MATTONCINO-1)>0
        If MATTONCINO(MATTONCINO-1)<10
         MATTONCINOELIMINATODALLEPALLINE=VERO
        Else If MATTONCINO(MATTONCINO-1)<28 and MATTONCINO(MATTONCINO-1)>9
         Add MATTONCINO(MATTONCINO-1),-9
         Paste Bob X0ZONA(MATTONCINO-1),Y0ZONA(MATTONCINO-1),MATTONCINO(MATTONCINO-1)+82
         Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
         Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(19)]
        End If 
        If MATTONCINOELIMINATODALLEPALLINE=VERO
         Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
         Proc MATTONCINIDIPOTENZIAMENTO[MATTONCINO,Rnd(19)]
         MATTONCINO(MATTONCINO-1)=0
        End If 
        If RIMBALZODELLEPALLINESUIMATTONCINI=VERO
         YMATTONCINO=Y0ZONA(MATTONCINO-1)
         If YPALLINA>YMATTONCINO and YPALLINA<YMATTONCINO+9
          DELTAXPALLINA(PALLINA)=-DELTAXPALLINA(PALLINA)
         Else 
          DELTAYPALLINA(PALLINA)=-DELTAYPALLINA(PALLINA)
         End If 
         If MATTONCINO(MATTONCINO-1)<28
          Sam Play SUONODAESEGUIRE(0),3 : Proc SUONODAESEGUIRE
         Else 
          Sam Play SUONODAESEGUIRE(0),3,10537 : Proc SUONODAESEGUIRE
         End If 
        Else 
         If MATTONCINO(MATTONCINO-1)<28
          Sam Play SUONODAESEGUIRE(0),6 : Proc SUONODAESEGUIRE
         Else 
          Sam Play SUONODAESEGUIRE(0),6,10537 : Proc SUONODAESEGUIRE
         End If 
        End If 
        For MATTONCINODARIDISEGNARE=0 To MATTONCINIDARIDISEGNARE-1
         If RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)=MATTONCINO
          RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=120
          RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)=MATTONCINO(MATTONCINO-1)
          Exit 
         End If 
        Next MATTONCINODARIDISEGNARE
        If MATTONCINODARIDISEGNARE=MATTONCINIDARIDISEGNARE
         For MATTONCINODARIDISEGNARE=0 To MATTONCINIDARIDISEGNARE-1
          If RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=0
           RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)=MATTONCINO
           RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=120
           RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)=MATTONCINO(MATTONCINO-1)
           Exit 
          End If 
         Next MATTONCINODARIDISEGNARE
        End If 
       End If 
      End If 
      If YPALLINA(PALLINA)>250 and Bob Col(FANTASMAPALLINA,OGGETTORIGAUNO To OGGETTORIGATRE)=VERO
       YPALLINA(PALLINA)=250
       DELTAYPALLINA(PALLINA)=-VELOCITADELLAPALLINA(PALLINA)
      Else If YPALLINA(PALLINA)>255
       If PALLINA(PALLINA)=VERO
        Bob Off FANTASMAPALLINA : Bob Update 
        Dec PALLINEINCAMPO
        PALLINA(PALLINA)=FALSO
       End If 
       If PALLINEINCAMPO=0
        Dec PALLINE
        If LASER>0
         Dec LASER
         If LASER=0
          Bob Off OGGETTOLASER
         End If 
        End If 
        Proc CANCELLAILRAGGIOLASER
        C0LLA=FALSO
        For P=0 To MASSIMOPALLINEINCAMPO-1
         PALLINAINCOLLATA(P)=FALSO
         If VELOCITADELLAPALLINA(P)>1
          Dec VELOCITADELLAPALLINA(P)
         End If 
        Next P
        RIMBALZODELLEPALLINESUIMATTONCINI=VERO
        INIZIOGIOCOSUONATO=FALSO
        Sam Play SUONODAESEGUIRE(0),5 : Proc SUONODAESEGUIRE
        Exit 2
       End If 
      End If 
     End If 
    Next PALLINA
    XBARRA=X Screen(X Mouse)
    If LUNGHEZZADELLABARRA=0
     Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,5
     Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,6
    Else If LUNGHEZZADELLABARRA=1
     Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,1
     Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,2
    Else If LUNGHEZZADELLABARRA=2
     Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,3
     Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,4
    End If 
    If TILTPALLINA=VERO
     Add XTILTPALLINA,-Sgn(XTILTPALLINA) : Add YTILTPALLINA,-Sgn(YTILTPALLINA)
     If XTILTPALLINA>0
      XTILTPALLINA=Max(XTILTPALLINA,0)
     Else If XTILTPALLINA<0
      XTILTPALLINA=Min(XTILTPALLINA,0)
     End If 
     If YTILTPALLINA>0
      YTILTPALLINA=Max(YTILTPALLINA,0)
     Else If YTILTPALLINA<0
      YTILTPALLINA=Min(YTILTPALLINA,0)
     End If 
     Screen Display 0,128+XTILTPALLINA,44+YTILTPALLINA,320,256
     If XTILTPALLINA=0 and YTILTPALLINA=0
      TILTPALLINA=FALSO
     End If 
    Else 
     If TASTOPREMUTO$=" "
      XTILTPALLINA=Rnd(32)-16 : YTILTPALLINA=Rnd(32)-16 : TILTPALLINA=VERO
     End If 
    End If 
    If LASER>0
     Bob OGGETTOLASER,XBARRA,YBARRA,6+LASER
    Else 
     Bob Off OGGETTOLASER
     If RAGGIOLASERSPARATO=VERO
      Proc CANCELLAILRAGGIOLASER
     End If 
    End If 
    If TASTODELTOPOCLICCATO=2
     If LASER>0
      Bob OGGETTOLASER,XBARRA,YBARRA,6+LASER
      If RAGGIOLASERSPARATO=FALSO
       XLASER=XBARRA : YLASER=YBARRA-1 : RAGGIOLASERSPARATO=VERO
       Sam Play SUONODAESEGUIRE(0),4,11363-LASER*3000 : Proc SUONODAESEGUIRE
      End If 
     End If 
    End If 
    If RAGGIOLASERSPARATO=VERO
     Bob OGGETTORAGGIOLASER,XLASER,YLASER,9+LASER
     Proc PULISCISOTTOILRAGGIOLASER[XLASER,YLASER]
     If RAGGIOLASERRIFLESSO=VERO
      If Bob Col(OGGETTORAGGIOLASER,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
       Proc CANCELLAILRAGGIOLASER
       RAGGIOLASERRIFLESSO=FALSO
      Else 
       Add YLASER,5
       If YLASER>255
        Proc CANCELLAILRAGGIOLASER
        RAGGIOLASERRIFLESSO=FALSO
       End If 
      End If 
     Else 
      Add YLASER,-5
      If YLASER<0
       Proc CANCELLAILRAGGIOLASER
      End If 
     End If 
     MATTONCINOELIMINATODALRAGGIOLASER=FALSO
     ZONALASER=Zone(XLASER,YLASER)
     If ZONALASER>0
      If MATTONCINO(ZONALASER-1)>0
       If MATTONCINO(ZONALASER-1)<10
        MATTONCINOELIMINATODALRAGGIOLASER=VERO
       Else If MATTONCINO(ZONALASER-1)<28 and MATTONCINO(ZONALASER-1)>9
        Add MATTONCINO(ZONALASER-1),-9
        Paste Bob X0ZONA(ZONALASER-1),Y0ZONA(ZONALASER-1),MATTONCINO(ZONALASER-1)+82
        Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
        Proc CANCELLAILRAGGIOLASER
       Else If MATTONCINO(ZONALASER-1)=28
        If LASER>0
         MATTONCINOELIMINATODALRAGGIOLASER=VERO
        End If 
       Else If MATTONCINO(ZONALASER-1)=29
        If LASER>1
         MATTONCINOELIMINATODALRAGGIOLASER=VERO
        Else 
         Proc CANCELLAILRAGGIOLASER
        End If 
       Else If MATTONCINO(ZONALASER-1)=30
        If LASER=3
         MATTONCINOELIMINATODALRAGGIOLASER=VERO
        Else 
         Proc CANCELLAILRAGGIOLASER
        End If 
       Else If MATTONCINO(ZONALASER-1)=31
        If LASER>0
         RAGGIOLASERRIFLESSO=VERO
         MATTONCINOELIMINATODALRAGGIOLASER=VERO
        Else 
         Proc CANCELLAILRAGGIOLASER
        End If 
       Else If MATTONCINO(ZONALASER-1)=32
        If LASER>1
         RAGGIOLASERRIFLESSO=VERO
         MATTONCINOELIMINATODALRAGGIOLASER=VERO
        Else 
         Proc CANCELLAILRAGGIOLASER
        End If 
       Else If MATTONCINO(ZONALASER-1)=33
        If LASER=3
         RAGGIOLASERRIFLESSO=VERO
         MATTONCINOELIMINATODALRAGGIOLASER=VERO
        Else 
         Proc CANCELLAILRAGGIOLASER
        End If 
       End If 
       If MATTONCINOELIMINATODALRAGGIOLASER=VERO
        Dec MATTONCINI : Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
        MATTONCINO(ZONALASER-1)=0
        If RAGGIOLASERRIFLESSO=FALSO
         Proc CANCELLAILRAGGIOLASER
        End If 
       End If 
       For MATTONCINODARIDISEGNARE=0 To MATTONCINIDARIDISEGNARE-1
        If RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)=ZONALASER
         RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=25
         RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)=MATTONCINO(ZONALASER-1)
         Exit 
        End If 
       Next MATTONCINODARIDISEGNARE
       If MATTONCINODARIDISEGNARE=MATTONCINIDARIDISEGNARE
        For MATTONCINODARIDISEGNARE=0 To MATTONCINIDARIDISEGNARE-1
         If RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=0
          RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)=ZONALASER
          RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=25
          RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)=MATTONCINO(ZONALASER-1)
          Exit 
         End If 
        Next MATTONCINODARIDISEGNARE
       End If 
      End If 
     End If 
    End If 
    If T0GLILARIGA>0
     If XRIGA>0
      Dec XRIGA : Proc T0GLILARIGA
     Else 
      T0GLILARIGA=0
     End If 
    Else 
     If RIGA>0
      If DURATARIGA>0
       Dec DURATARIGA
       If DURATARIGA=0
        T0GLILARIGA=RIGA : RIGA=0
       End If 
      End If 
      If XRIGA<XFINALERIGA
       Inc XRIGA : Proc METTILARIGA
      End If 
     End If 
    End If 
    Proc MATTONCINIDIPOTENZIAMENTO[0,0]
    Bob Update 
    For MATTONCINODARIDISEGNARE=0 To MATTONCINIDARIDISEGNARE-1
     If RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)>0
      If RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)>0
       X0ZONA=X0ZONA(RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)-1)
       X1ZONA=X0ZONA+19
       Y0ZONA=Y0ZONA(RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)-1)
       Y1ZONA=Y0ZONA+9
       If RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)>0
        Paste Bob X0ZONA,Y0ZONA,RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)+82
       Else 
        Ink 0 : Bar X0ZONA,Y0ZONA To X1ZONA,Y1ZONA
       End If 
       Dec RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)
      Else 
       RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)=0
       RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=0
       RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)=0
      End If 
     End If 
    Next MATTONCINODARIDISEGNARE
    Wait Vbl 
    If PUNTEGGIO>PUNTEGGIOMASSIMO
     PUNTEGGIOMASSIMO=PUNTEGGIO : Proc MOSTRAILPUNTEGGIOMASSIMO[FALSO]
    End If 
    If BONUS>0
     If Timer>9
      Dec BONUS : Proc MOSTRAILBONUS[FALSO]
      Timer=0
     End If 
    End If 
    If MATTONCINI=0
     If RIGA>0
      T0GLILARIGA=RIGA
      For XRIGA=XRIGA To 0 Step -1
       Proc T0GLILARIGA : Wait Vbl 
      Next XRIGA
      RIGA=0
      Inc XRIGA
     End If 
     Proc CANCELLALEPALLINE
     PALLINEINCAMPOALLINIZIO=PALLINEINCAMPO
     Proc METTILEPALLINESULLABARRA
     Proc CANCELLAILRAGGIOLASER
     Proc CANCELLATUTTIIMATTONCINI
     Proc ANNULLAILRIDISEGNODEIMATTONCINI
     Proc CANCELLAIMATTONCINIDIPOTENZIAMENTO
     Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,VERO]
     Proc AGGIUNGIILBONUSALPUNTEGGIO
     Inc LIVELLO
     Proc CARICAILLIVELLO
     Exit If LIVELLO=-1,2
     Proc DABANCOAVARIABILI
     Ink 0 : Bar 0,0 To 271,211
     Proc MOSTRAIMATTONCINI
     Proc CONTAIMATTONCINI
     NUOVOLIVELLO=VERO
     Exit 
    End If 
   Loop 
  Until PALLINE=0
  Proc CANCELLALEPALLINE
  Proc CANCELLALABARRA
  If RIGA>0
   T0GLILARIGA=RIGA
   For XRIGA=XRIGA To 0 Step -1
    Proc T0GLILARIGA : Wait Vbl 
   Next XRIGA
  End If 
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,VERO]
  FINEGIOCO$="The game is finished,"+Chr$(10)+"I hope you have enjoyed."+Chr$(10)+"Bye bye!"
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[FINEGIOCO$,22,0,ALTEZZAFONT,FALSO]
  Proc _ASPETTA[500]
 End If 
Loop 
Bob Off : Bob Update : Flash Off 
Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,FALSO]
Proc DISSOLVENZADEICOLORI[0,1,1]
Proc T0GLIIMATTONCINI
Proc T0GLIILPANNELLO
Proc T0GLILARCOBALENO
Screen Close 0 : Erase All : End 
Procedure AGGIUNGIILBONUSALPUNTEGGIO
 If BONUS>0
  BONUS$="I am going to add the bonus points"+Chr$(10)+"to your game points..."+Chr$(10)+"Wait for a moment, please..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,0,ALTEZZAFONT,FALSO]
  Repeat 
   Inc PUNTEGGIO : Proc MOSTRAILPUNTEGGIO[FALSO]
   If PUNTEGGIO>PUNTEGGIOMASSIMO
    PUNTEGGIOMASSIMO=PUNTEGGIO : Proc MOSTRAILPUNTEGGIOMASSIMO[FALSO]
   End If 
   Dec BONUS : Proc MOSTRAILBONUS[FALSO]
  Until BONUS=0
 Else 
  BONUS$="There are no bonus points"+Chr$(10)+"to add to your game points..."+Chr$(10)+"I am sorry..."+Chr$(10)+"I wish a better luck for the next level."+Chr$(10)+"Press a (mouse) key to continue..."
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[BONUS$,22,0,ALTEZZAFONT,FALSO]
  _ASPETTA[1000]
 End If 
 Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE[" ",0,0,ALTEZZAFONT,FALSO]
End Proc
Procedure ANNULLAILRIDISEGNODEIMATTONCINI
 For MATTONCINODARIDISEGNARE=0 To MATTONCINIDARIDISEGNARE-1
  RIDISEGNODELMATTONCINO(0,MATTONCINODARIDISEGNARE)=0
  RIDISEGNODELMATTONCINO(1,MATTONCINODARIDISEGNARE)=0
  RIDISEGNODELMATTONCINO(2,MATTONCINODARIDISEGNARE)=0
 Next MATTONCINODARIDISEGNARE
End Proc
Procedure _ASPETTA[TEMP0DAASPETTARE]
 Shared TASTO
 TASTO=0
 Timer=0
 Repeat 
  Exit If Timer>=TEMP0DAASPETTARE
  TASTODELTOPOPREMUTO=Mouse Key
  TASTOPREMUTO$=Inkey$
 Until TASTODELTOPOPREMUTO>0 or TASTOPREMUTO$<>""
 If TASTODELTOPOPREMUTO>0
  TASTO=-TASTODELTOPOPREMUTO
 Else 
  TASTO=Asc(TASTOPREMUTO$)
 End If 
End Proc
Procedure CAMBIALALUNGHEZZADELLABARRA
 If LUNGHEZZADELLABARRACAMBIATA<>LUNGHEZZADELLABARRA
  If LUNGHEZZADELLABARRA=0
   If LUNGHEZZADELLABARRACAMBIATA=1
    Gosub LUNGHEZZADAZEROAUNO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=2
    Gosub LUNGHEZZADAZEROAUNO
    Gosub LUNGHEZZADAUNOADUE
   End If 
  Else If LUNGHEZZADELLABARRA=1
   If LUNGHEZZADELLABARRACAMBIATA=0
    Gosub LUNGHEZZADAUNOAZERO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=2
    Gosub LUNGHEZZADAUNOADUE
   End If 
  Else If LUNGHEZZADELLABARRA=2
   If LUNGHEZZADELLABARRACAMBIATA=0
    Gosub LUNGHEZZADADUEAUNO
    Gosub LUNGHEZZADAUNOAZERO
   End If 
   If LUNGHEZZADELLABARRACAMBIATA=1
    Gosub LUNGHEZZADADUEAUNO
   End If 
  End If 
 End If 
 LUNGHEZZADELLABARRA=LUNGHEZZADELLABARRACAMBIATA
 If LUNGHEZZADELLABARRA=0
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,5
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,6
 Else If LUNGHEZZADELLABARRA=1
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,1
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,2
 Else If LUNGHEZZADELLABARRA=2
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,3
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,4
 End If 
 Proc LIMITAIMOVIMENTIDELLABARRA
 Pop Proc
 LUNGHEZZADAZEROAUNO:
 For OGGETTO=45 To 41 Step -1
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+5
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update : Wait Vbl 
 Next OGGETTO
 Return 
 LUNGHEZZADAUNOADUE:
 For OGGETTO=13 To 26
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+14
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update : Wait Vbl 
 Next OGGETTO
 Return 
 LUNGHEZZADADUEAUNO:
 For OGGETTO=26 To 13 Step -1
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+14
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update : Wait Vbl 
 Next OGGETTO
 Return 
 LUNGHEZZADAUNOAZERO:
 For OGGETTO=41 To 45
  Bob OGGETTOCENTRODELLABARRA,XBARRA,YBARRA,OGGETTO
  Bob OGGETTOLATIDELLABARRA,XBARRA,YBARRA,OGGETTO+5
  Proc LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
  Bob Update : Wait Vbl 
 Next OGGETTO
 Return 
End Proc
Procedure CANCELLAILRAGGIOLASER
 Bob Off OGGETTORAGGIOLASER
 RAGGIOLASERSPARATO=FALSO
End Proc
Procedure CANCELLAIMATTONCINIDIPOTENZIAMENTO
 For FANTASMA=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
  Bob Off FANTASMA
 Next FANTASMA
End Proc
Procedure CANCELLALABARRA
 Bob Off OGGETTOCENTRODELLABARRA : Bob Off OGGETTOLATIDELLABARRA
 If LASER>0 Then Bob Off OGGETTOLASER
 Bob Update 
End Proc
Procedure CANCELLALEPALLINE
 For PALLINA=0 To MASSIMOPALLINEINCAMPO-1
  P=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO+PALLINA
  Bob Off P
 Next PALLINA
 Bob Update 
End Proc
Procedure CANCELLATUTTIIMATTONCINI
 Cls 0,0,0 To Screen Width-1-LARGHEZZAPANNELLO+1,255+1
End Proc
Procedure CARICAGLIOGGETTI
 Load PERCORSODELLAGRAFICA$+OGGETTI$
 IMMAGINEPALLINA=Length(1)
 MATTONCINIDIPOTENZIAMENTO=Length(1)-116
End Proc
Procedure CARICAILLIVELLO
 LIVELLO$=PERCORSODEILIVELLI$+"Livello"+Str$(LIVELLO)-" "
 If Exist(LIVELLO$)
  Open In 1,LIVELLO$
  MARCATORE$=Input$(1,9)
  LUNGHEZZABANCO=Lof(1)
  Close 1
  If MARCATORE$="Mattonite"
   Reserve As Work BANCO,LUNGHEZZABANCO
   Bload LIVELLO$,Start(BANCO)
  End If 
 Else 
  LIVELLO=-1
 End If 
End Proc
Procedure CARICAISUONI
 Load PERCORSODELLAMUSICA$+SUONI$
End Proc
Procedure CONTAIMATTONCINI
 For M=0 To 246
  If MATTONCINO(M)>0 Then Inc MATTONCINI
 Next M
End Proc
Procedure CREALERIGHE
 Ink 20 : Bar 0,241 To XFINALERIGA,245
 Get Bob OGGETTORIGAUNO,0,241 To XFINALERIGA+1,245+1
 Hot Spot OGGETTORIGAUNO,XFINALERIGA,0
 Ink 21 : Bar 0,246 To XFINALERIGA,250
 Get Bob OGGETTORIGADUE,0,246 To XFINALERIGA+1,250+1
 Hot Spot OGGETTORIGADUE,XFINALERIGA,0
 Ink 22 : Bar 0,251 To XFINALERIGA,255
 Get Bob OGGETTORIGATRE,0,251 To XFINALERIGA+1,255+1
 Hot Spot OGGETTORIGATRE,XFINALERIGA,0
 Cls 
End Proc
Procedure DABANCOAVARIABILI
 If Length(BANCO)>0
  INDIRIZZO=Start(BANCO)+9
  For A=0 To 246
   MATTONCINO(A)=Peek(INDIRIZZO)
   Inc INDIRIZZO
  Next A
  For A=0 To 255
   ARCOBALENO=Peek(INDIRIZZO)
   Inc INDIRIZZO
   ARCOBALENO=ARCOBALENO+Peek(INDIRIZZO)*$100
   Rain(0,A)=ARCOBALENO
   Rainbow 0,257,0,271
   Wait Vbl 
   Inc INDIRIZZO
  Next A
  BONUS=Peek(INDIRIZZO)
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*100
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*10000
  Inc INDIRIZZO
  Add BONUS,Peek(INDIRIZZO)*1000000
  Inc INDIRIZZO
 End If 
 Erase BANCO
End Proc
Procedure DISSOLVENZADEICOLORI[C0LORE,VELOCITA,M0DO]
 C0LORIDELLOSCHERMOMENOUNO=Screen Colour-1
 If C0LORIDELLOSCHERMOMENOUNO=63 Then C0LORIDELLOSCHERMOMENOUNO=31
 If M0DO=0
  For C=0 To C0LORIDELLOSCHERMOMENOUNO
   Colour C,C0LORE
   If VELOCITA>0
    Wait VELOCITA
   End If 
  Next C
 Else 
  Dim ROSSO(C0LORIDELLOSCHERMOMENOUNO),VERDE(C0LORIDELLOSCHERMOMENOUNO),BLU(C0LORIDELLOSCHERMOMENOUNO)
  Dim ROSSOFINALE(C0LORIDELLOSCHERMOMENOUNO),VERDEFINALE(C0LORIDELLOSCHERMOMENOUNO),BLUFINALE(C0LORIDELLOSCHERMOMENOUNO)
  Dim ROSSODISSOLTO(C0LORIDELLOSCHERMOMENOUNO),VERDEDISSOLTO(C0LORIDELLOSCHERMOMENOUNO),BLUDISSOLTO(C0LORIDELLOSCHERMOMENOUNO)
  For C=0 To C0LORIDELLOSCHERMOMENOUNO
   If M0DO=1
    ROSSOFINALE(C)=C0LORE/256
    VERDEFINALE(C)=C0LORE/16 mod 16
    BLUFINALE(C)=C0LORE mod 16
   Else If M0DO=2
    ROSSOFINALE(C)=C0LOREFINALE(C)/256
    VERDEFINALE(C)=C0LOREFINALE(C)/16 mod 16
    BLUFINALE(C)=C0LOREFINALE(C) mod 16
   End If 
   ROSSO(C)=Colour(C)/256
   VERDE(C)=Colour(C)/16 mod 16
   BLU(C)=Colour(C) mod 16
  Next C
  Repeat 
   For C=0 To C0LORIDELLOSCHERMOMENOUNO
    If ROSSODISSOLTO(C)=FALSO
     If ROSSO(C)<ROSSOFINALE(C)
      Inc ROSSO(C)
     Else If ROSSO(C)=ROSSOFINALE(C)
      ROSSODISSOLTO(C)=VERO
     Else If ROSSO(C)>ROSSOFINALE(C)
      Dec ROSSO(C)
     End If 
    End If 
    If VERDEDISSOLTO(C)=FALSO
     If VERDE(C)<VERDEFINALE(C)
      Inc VERDE(C)
     Else If VERDE(C)=VERDEFINALE(C)
      VERDEDISSOLTO(C)=VERO
     Else If VERDE(C)>VERDEFINALE(C)
      Dec VERDE(C)
     End If 
    End If 
    If BLUDISSOLTO(C)=FALSO
     If BLU(C)<BLUFINALE(C)
      Inc BLU(C)
     Else If BLU(C)=BLUFINALE(C)
      BLUDISSOLTO(C)=VERO
     Else If BLU(C)>BLUFINALE(C)
      Dec BLU(C)
     End If 
    End If 
    Colour C,ROSSO(C)*256+VERDE(C)*16+BLU(C)
    If C=0
     C0LORIDISSOLTI=0
    End If 
    If ROSSODISSOLTO(C)=VERO
     If VERDEDISSOLTO(C)=VERO
      If BLUDISSOLTO(C)=VERO
       Inc C0LORIDISSOLTI
      End If 
     End If 
    End If 
   Next C
   If VELOCITA>0
    Wait VELOCITA
   End If 
  Until C0LORIDISSOLTI=C0LORIDELLOSCHERMOMENOUNO+1
 End If 
End Proc
Procedure IMPOSTAGLIOGGETTIPERLERIGHE
 OGGETTORIGAUNO=IMMAGINEPALLINA+1
 OGGETTORIGADUE=IMMAGINEPALLINA+2
 OGGETTORIGATRE=IMMAGINEPALLINA+3
End Proc
Procedure IMPOSTAICOLORI
 Get Bob Palette 
 C0LORIDELLOSCHERMOMENOUNO=Screen Colour-1
 If C0LORIDELLOSCHERMOMENOUNO=63 Then C0LORIDELLOSCHERMOMENOUNO=31
 For C=0 To C0LORIDELLOSCHERMOMENOUNO
  C0LOREFINALE(C)=Colour(C)
 Next C
End Proc
Procedure IMPOSTAILAMPEGGI
 Flash 20,"(0FF,2)(FFF,1)(0FF,2)(000,1)"
 Flash 21,"(F70,2)(FFF,1)(F70,2)(000,1)"
 Flash 22,"(F77,9)(FF7,9)(7F7,9)(7FF,9)(77F,9)(F7F,9)"
End Proc
Procedure IMPOSTAILMODODIRIDISEGNODEGLIOGGETTI
 For OGGETTO=0 To 254
  Set Bob OGGETTO,0,,
 Next OGGETTO
End Proc
Procedure IMPOSTAICANALIDELSUONODAESEGUIRE
 For CANALEDELSUONO=0 To 3
  SUONODAESEGUIRE(CANALEDELSUONO)=2^CANALEDELSUONO
 Next CANALEDELSUONO
End Proc
Procedure IMPOSTAIPERCORSIDEIFILE
 PERCORSODEILIVELLI$=PERCORSO$+"Livelli/"
 PERCORSODELLAGRAFICA$=PERCORSO$+"Grafica/"
 PERCORSODELLAMUSICA$=PERCORSO$+"Musica/"
End Proc
Procedure IMPOSTALADURATADELLERIGHE
 DURATARIGA(0)=3000
 DURATARIGA(1)=10000
 DURATARIGA(2)=2^32-1
End Proc
Procedure IMPOSTALARCOBALENO
 Set Rainbow 0,C0LOREARCOBALENO,271,"","","" : Rainbow 0,257,0,271
End Proc
Procedure IMPOSTALEVELOCITADELLEPALLINE
 For P=0 To MASSIMOPALLINEINCAMPO-1
  VELOCITADELLAPALLINA(P)=2
 Next P
End Proc
Procedure IMPOSTALEZONE
 Reserve Zone 247
 For M=0 To 246
  LINEADIMATTONCINI=M/13
  RIGADIMATTONCINI=M mod 13
  X0ZONA(M)=RIGADIMATTONCINI*21
  Y0ZONA(M)=LINEADIMATTONCINI*11
  Set Zone M+1,X0ZONA(M),Y0ZONA(M) To X0ZONA(M)+20,Y0ZONA(M)+10
 Next M
End Proc
Procedure IMPOSTALINGOMBRODELLABARRA
 For L=0 To 2
  If L=0
   INGOMBRODELLABARRA(0)=10
  Else If L=1
   INGOMBRODELLABARRA(1)=16
  Else If L=2
   INGOMBRODELLABARRA(2)=31
  End If 
 Next L
End Proc
Procedure IMPOSTALOSCHERMO
 Screen Open 0,320,256,64,Lowres
 Curs Off : Flash Off : Pen 29 : Paper 0 : Cls : Autoback 0 : Bob Update Off 
 XFINALERIGA=Screen Width-1-LARGHEZZAPANNELLO
End Proc
Procedure INDIVIDUALAPOSIZIONEDELPROGRAMMA
 PERCORSO$=Dir$
End Proc
Procedure LIMITAIMOVIMENTIDELLABARRA
 X0TOPO=INGOMBRODELLABARRA(LUNGHEZZADELLABARRA)
 X1TOPO=Screen Width-1-LARGHEZZAPANNELLO-INGOMBRODELLABARRA(LUNGHEZZADELLABARRA)
 Limit Mouse X Hard(X0TOPO),Y Hard(0) To X Hard(X1TOPO),Y Hard(255)
End Proc
Procedure LIMITAIMOVIMENTIDELLABARRAMENTRESTACAMBIANDO[OGGETTO]
 If OGGETTO>39 and OGGETTO<46
  INGOMBRODELLABARRA=46-OGGETTO+10
 Else If OGGETTO>12 and OGGETTO<27
  INGOMBRODELLABARRA=OGGETTO+4
 End If 
 X0TOPO=INGOMBRODELLABARRA
 X1TOPO=Screen Width-1-LARGHEZZAPANNELLO-INGOMBRODELLABARRA
 Limit Mouse X Hard(X0TOPO),Y Hard(0) To X Hard(X1TOPO),Y Hard(255)
End Proc
Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
 '-> Limiti by Stefano Regattin 
 'i> 19 maggio 1996 
 'm> 12 giugno 1996 
 '--------------------------------------------------------
 'La procedura equivale alle seguenti linee di programma: 
 ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
 ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
 'Se LIMITEMINIMO è maggiore di LIMITEMASSIMO ne scambia i valori 
 '----------------------------------------------------------------  
 If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
 NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
End Proc[NUMERO]
Procedure MATTONCINIDIPOTENZIAMENTO[MATTONCINO,FREQUENZADIUSCITADEIMATTONCINIDIPOTENZIAMENTO]
 If FREQUENZADIUSCITADEIMATTONCINIDIPOTENZIAMENTO=0
  If MATTONCINO=0
   For FANTASMA=0 To MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO-1
    If MATTONCINODIPOTENZIAMENTO(FANTASMA)>0
     If Bob Col(FANTASMA,OGGETTOCENTRODELLABARRA To OGGETTOLATIDELLABARRA)=VERO
      F=MATTONCINODIPOTENZIAMENTO(FANTASMA) : MATTONCINODIPOTENZIAMENTO(FANTASMA)=0
      If F=19
       Add PUNTEGGIO,20
      Else 
       Add PUNTEGGIO,10
      End If 
      Proc MOSTRAILPUNTEGGIO[True]
      Repeat 
       If F=1 : Rem add a ball in the game field   
        If PALLINEINCAMPO<MASSIMOPALLINEINCAMPO-1
         For P=0 To MASSIMOPALLINEINCAMPO-1
          If PALLINA(P)=FALSO
           XPALLINA(P)=XBARRA
           YPALLINA(P)=LIMITEYPALLINA
           D1REZIONEPALLINA=Rnd(1)
           If D1REZIONEPALLINA=0
            DELTAXPALLINA(P)=VELOCITADELLAPALLINA(P)
           Else 
            DELTAXPALLINA(P)=-VELOCITADELLAPALLINA(P)
           End If 
           DELTAYPALLINA(P)=-VELOCITADELLAPALLINA(P)
           RIMBALZODELLAPALLINAAILATIDELLABARRA(P)=FALSO
           FANTASMAPALLINA=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO+P
           Bob FANTASMAPALLINA,XPALLINA(P),YPALLINA(P),IMMAGINEPALLINA
           PALLINA(P)=VERO : Exit 
          End If 
         Next P
         Inc PALLINEINCAMPO
        End If 
        F=0
       Else If F=2 : Rem ball+  
        If PALLINE<999
         Inc PALLINE : Proc MOSTRALEPALLINERIMASTE
        End If 
        F=0
       Else If F=3 : Rem ball-
        If PALLINE>0
         Dec PALLINE : Proc MOSTRALEPALLINERIMASTE
        End If 
        F=0
       Else If F=4 : Rem Bar+ 
        If LUNGHEZZADELLABARRACAMBIATA<2
         Inc LUNGHEZZADELLABARRACAMBIATA
         Proc CAMBIALALUNGHEZZADELLABARRA
        End If 
        F=0
       Else If F=5 : Rem Bar- 
        If LUNGHEZZADELLABARRACAMBIATA>0
         Dec LUNGHEZZADELLABARRACAMBIATA
         Proc CAMBIALALUNGHEZZADELLABARRA
        End If 
        F=0
       Else If F=6 : Rem Glue 
        C0LLA= Not C0LLA
        F=0
       Else If F=7 : Rem Laser+   
        If LASER<3
         Inc LASER
        End If 
        F=0
       Else If F=8 : Rem Laser- 
        If LASER>0
         Dec LASER
        End If 
        F=0
       Else If F=9 : Rem Next level 
        MATTONCINI=0
        F=0
       Else If F=10 : Rem Points+    
        If PUNTEGGIO<9999899
         Add PUNTEGGIO,90 : Proc MOSTRAILPUNTEGGIO[True]
        End If 
        F=0
       Else If F=11 : Rem Points-    
        If PUNTEGGIO>99
         Add PUNTEGGIO,-111 : Proc MOSTRAILPUNTEGGIO[True]
        End If 
        F=0
       Else If F=12 : Rem Row+   
        If RIGA<3
         T0GLILARIGA=RIGA : Inc RIGA
        End If 
        F=0
       Else If F=13 : Rem Row-   
        If RIGA>0
         T0GLILARIGA=RIGA : Dec RIGA
        End If 
        F=0
       Else If F=14 : Rem Balls speed+   
        For P=0 To MASSIMOPALLINEINCAMPO-1
         If PALLINA(P)=VERO
          If VELOCITADELLAPALLINA(P)<4
           Inc VELOCITADELLAPALLINA(P)
           DELTAXPALLINA(P)=VELOCITADELLAPALLINA(P)*Sgn(DELTAXPALLINA(P))
           DELTAYPALLINA(P)=VELOCITADELLAPALLINA(P)*Sgn(DELTAYPALLINA(P))
          End If 
         End If 
        Next P
        F=0
       Else If F=15 : Rem Balls speed-   
        For P=0 To MASSIMOPALLINEINCAMPO-1
         If PALLINA(P)=VERO
          If VELOCITADELLAPALLINA(P)>1
           Dec VELOCITADELLAPALLINA(P)
           DELTAXPALLINA(P)=VELOCITADELLAPALLINA(P)*Sgn(DELTAXPALLINA(P))
           DELTAYPALLINA(P)=VELOCITADELLAPALLINA(P)*Sgn(DELTAYPALLINA(P))
          End If 
         End If 
        Next P
        F=0
       Else If F=16 : Rem Xtreme   
        RIMBALZODELLEPALLINESUIMATTONCINI= Not RIMBALZODELLEPALLINESUIMATTONCINI
        F=0
       Else If F=17 : Rem y+   
        If YBARRA<247
         Add YBARRA,5
        End If 
        LIMITEYPALLINA=YBARRA-4
        F=0
       Else If F=18 : Rem y-   
        If YBARRA>147
         Add YBARRA,-5
        End If 
        LIMITEYPALLINA=YBARRA-4
        F=0
       Else If F=19 : Rem ?  
        F=Rnd(MATTONCINIDIPOTENZIAMENTO-2)+1
       End If 
      Until F=0
     End If 
     If MATTONCINODIPOTENZIAMENTO(FANTASMA)>0
      Inc YMATTONCINODIPOTENZIAMENTO(FANTASMA)
      Bob FANTASMA,XMATTONCINODIPOTENZIAMENTO(FANTASMA),YMATTONCINODIPOTENZIAMENTO(FANTASMA),MATTONCINODIPOTENZIAMENTO(FANTASMA)+115
      Proc PULISCISOTTOILMATTONCINODIPOTENZIAMENTO[XMATTONCINODIPOTENZIAMENTO(FANTASMA),YMATTONCINODIPOTENZIAMENTO(FANTASMA)]
      If YMATTONCINODIPOTENZIAMENTO(FANTASMA)>255
       MATTONCINODIPOTENZIAMENTO(FANTASMA)=0
      End If 
     End If 
    Else 
     Bob Off FANTASMA
    End If 
   Next FANTASMA
   If PUNTEGGIO>PUNTEGGIOMASSIMO
    PUNTEGGIOMASSIMO=PUNTEGGIO : Proc MOSTRAILPUNTEGGIOMASSIMO[FALSO]
   End If 
  Else 
   FANTASMA=0
   Repeat 
    Exit If MATTONCINODIPOTENZIAMENTO(FANTASMA)=0
    Inc FANTASMA
   Until FANTASMA=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO
   If FANTASMA<MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO
    If MATTONCINO<0
     XMATTONCINODIPOTENZIAMENTO(FANTASMA)=XBARRA-9
     YMATTONCINODIPOTENZIAMENTO(FANTASMA)=0
     MATTONCINODIPOTENZIAMENTO(FANTASMA)=-MATTONCINO
    Else 
     XMATTONCINODIPOTENZIAMENTO(FANTASMA)=X0ZONA(MATTONCINO-1)
     YMATTONCINODIPOTENZIAMENTO(FANTASMA)=Y0ZONA(MATTONCINO-1)
     MATTONCINODIPOTENZIAMENTO(FANTASMA)=Rnd(MATTONCINIDIPOTENZIAMENTO-1)+1
    End If 
    Bob FANTASMA,XMATTONCINODIPOTENZIAMENTO(FANTASMA),YMATTONCINODIPOTENZIAMENTO(FANTASMA),MATTONCINODIPOTENZIAMENTO(FANTASMA)+115
    Proc PULISCISOTTOILMATTONCINODIPOTENZIAMENTO[XMATTONCINODIPOTENZIAMENTO(FANTASMA),YMATTONCINODIPOTENZIAMENTO(FANTASMA)]
   End If 
  End If 
 End If 
End Proc
Procedure METTILARIGA
 If RIGA=1
  Bob OGGETTORIGAUNO,XRIGA,251,OGGETTORIGAUNO
 Else If RIGA=2
  Bob OGGETTORIGADUE,XRIGA,251,OGGETTORIGADUE
 Else If RIGA=3
  Bob OGGETTORIGATRE,XRIGA,251,OGGETTORIGATRE
 End If 
 If RIGA>0 and XRIGA=XFINALERIGA Then DURATARIGA=DURATARIGA(RIGA-1)
End Proc
Procedure METTILEPALLINESULLABARRA
 For PALLINA=0 To PALLINEINCAMPO-1
  XPALLINA(PALLINA)=XBARRA-14+PALLINA*7
  YPALLINA(PALLINA)=LIMITEYPALLINA
  FANTASMAPALLINA=MASSIMOMATTONCINIDIPOTENZIAMENTOINCAMPO+PALLINA
  Bob FANTASMAPALLINA,XPALLINA(PALLINA),YPALLINA(PALLINA),IMMAGINEPALLINA
 Next PALLINA
End Proc
Procedure MOSTRAILBONUS[M0DO]
 If M0DO=VERO
  CIFRA=BONUS mod 10
  Paste Bob 273,228,25+Asc(Str$(CIFRA)-" ")
  CIFRA=BONUS/10 mod 10
  Paste Bob 273,210,25+Asc(Str$(CIFRA)-" ")
  CIFRA=BONUS/100 mod 10
  Paste Bob 273,192,25+Asc(Str$(CIFRA)-" ")
  CIFRA=BONUS/1000 mod 10
  Paste Bob 273,174,25+Asc(Str$(CIFRA)-" ")
  CIFRA=BONUS/10000 mod 10
  Paste Bob 273,156,25+Asc(Str$(CIFRA)-" ")
  CIFRA=BONUS/100000 mod 10
  Paste Bob 273,138,25+Asc(Str$(CIFRA)-" ")
  CIFRA=BONUS/1000000 mod 10
  Paste Bob 273,120,25+Asc(Str$(CIFRA)-" ")
 Else 
  CIFRA=BONUS mod 10
  Paste Bob 273,228,25+Asc(Str$(CIFRA)-" ")
  If CIFRA=9
   CIFRA=BONUS/10 mod 10
   Paste Bob 273,210,25+Asc(Str$(CIFRA)-" ")
   If CIFRA=9
    CIFRA=BONUS/100 mod 10
    Paste Bob 273,192,25+Asc(Str$(CIFRA)-" ")
    If CIFRA=9
     CIFRA=BONUS/1000 mod 10
     Paste Bob 273,174,25+Asc(Str$(CIFRA)-" ")
     If CIFRA=9
      CIFRA=BONUS/10000 mod 10
      Paste Bob 273,156,25+Asc(Str$(CIFRA)-" ")
      If CIFRA=9
       CIFRA=BONUS/100000 mod 10
       Paste Bob 273,138,25+Asc(Str$(CIFRA)-" ")
       If CIFRA=9
        CIFRA=BONUS/1000000 mod 10
        Paste Bob 273,120,25+Asc(Str$(CIFRA)-" ")
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAILLIVELLO
 CIFRA=LIVELLO mod 10
 Paste Bob 305,29,15+Asc(Str$(CIFRA)-" ")
 CIFRA=LIVELLO/10 mod 10
 Paste Bob 289,29,15+Asc(Str$(CIFRA)-" ")
 CIFRA=LIVELLO/100 mod 10
 Paste Bob 273,29,15+Asc(Str$(CIFRA)-" ")
End Proc
Procedure MOSTRAILPUNTEGGIO[M0DO]
 If M0DO=VERO
  CIFRA=PUNTEGGIO mod 10
  Paste Bob 289,228,5+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIO/10 mod 10
  Paste Bob 289,210,5+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIO/100 mod 10
  Paste Bob 289,192,5+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIO/1000 mod 10
  Paste Bob 289,174,5+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIO/10000 mod 10
  Paste Bob 289,156,5+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIO/100000 mod 10
  Paste Bob 289,138,5+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIO/1000000 mod 10
  Paste Bob 289,120,5+Asc(Str$(CIFRA)-" ")
 Else 
  CIFRA=PUNTEGGIO mod 10
  Paste Bob 289,228,5+Asc(Str$(CIFRA)-" ")
  If CIFRA=0
   CIFRA=PUNTEGGIO/10 mod 10
   Paste Bob 289,210,5+Asc(Str$(CIFRA)-" ")
   If CIFRA=0
    CIFRA=PUNTEGGIO/100 mod 10
    Paste Bob 289,192,5+Asc(Str$(CIFRA)-" ")
    If CIFRA=0
     CIFRA=PUNTEGGIO/1000 mod 10
     Paste Bob 289,174,5+Asc(Str$(CIFRA)-" ")
     If CIFRA=0
      CIFRA=PUNTEGGIO/10000 mod 10
      Paste Bob 289,156,5+Asc(Str$(CIFRA)-" ")
      If CIFRA=0
       CIFRA=PUNTEGGIO/100000 mod 10
       Paste Bob 289,138,5+Asc(Str$(CIFRA)-" ")
       If CIFRA=0
        CIFRA=PUNTEGGIO/1000000 mod 10
        Paste Bob 289,120,5+Asc(Str$(CIFRA)-" ")
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAILPUNTEGGIOMASSIMO[M0DO]
 If M0DO=VERO
  CIFRA=PUNTEGGIOMASSIMO mod 10
  Paste Bob 305,228,15+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIOMASSIMO/10 mod 10
  Paste Bob 305,210,15+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIOMASSIMO/100 mod 10
  Paste Bob 305,192,15+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIOMASSIMO/1000 mod 10
  Paste Bob 305,174,15+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIOMASSIMO/10000 mod 10
  Paste Bob 305,156,15+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIOMASSIMO/100000 mod 10
  Paste Bob 305,138,15+Asc(Str$(CIFRA)-" ")
  CIFRA=PUNTEGGIOMASSIMO/1000000 mod 10
  Paste Bob 305,120,15+Asc(Str$(CIFRA)-" ")
 Else 
  CIFRA=PUNTEGGIOMASSIMO mod 10
  Paste Bob 305,228,15+Asc(Str$(CIFRA)-" ")
  If CIFRA=0
   CIFRA=PUNTEGGIOMASSIMO/10 mod 10
   Paste Bob 305,210,15+Asc(Str$(CIFRA)-" ")
   If CIFRA=0
    CIFRA=PUNTEGGIOMASSIMO/100 mod 10
    Paste Bob 305,192,15+Asc(Str$(CIFRA)-" ")
    If CIFRA=0
     CIFRA=PUNTEGGIOMASSIMO/1000 mod 10
     Paste Bob 305,174,15+Asc(Str$(CIFRA)-" ")
     If CIFRA=0
      CIFRA=PUNTEGGIOMASSIMO/10000 mod 10
      Paste Bob 305,156,15+Asc(Str$(CIFRA)-" ")
      If CIFRA=0
       CIFRA=PUNTEGGIOMASSIMO/100000 mod 10
       Paste Bob 305,138,15+Asc(Str$(CIFRA)-" ")
       If CIFRA=0
        CIFRA=PUNTEGGIOMASSIMO/1000000 mod 10
        Paste Bob 305,120,15+Asc(Str$(CIFRA)-" ")
       End If 
      End If 
     End If 
    End If 
   End If 
  End If 
 End If 
End Proc
Procedure MOSTRAIMATTONCINI
 For M=0 To 246
  If MATTONCINO(M)=0
   Ink 0 : Bar X0ZONA(M),Y0ZONA(M) To X0ZONA(M)+19,Y0ZONA(M)+9
  Else 
   Paste Bob X0ZONA(M),Y0ZONA(M),MATTONCINO(M)+82
  End If 
 Next M
End Proc
Procedure MOSTRAIPUNTEGGIDEIGIOCATORI
 PUNTEGGI$=PERCORSO$+"Punteggi"
 If Exist(PUNTEGGI$)
  If Eof(1)=FALSO
   Open In 1,PUNTEGGI$
   For POSIZIONE=0 To 99
    Input #1,GIOCATORE$(POSIZIONE)
    Input #1,PUNTEGGIO(POSIZIONE)
    Exit If Eof(1)=VERO
   Next POSIZIONE
  End If 
 Else 
  Proc TESTOGRAFICOCENTRATOOFATTOSCORRERE["No players till now...",20,0,ALTEZZAFONT,FALSO]
 End If 
End Proc
Procedure MOSTRAILPANNELLO
 Paste Bob Screen Width-1-LARGHEZZAPANNELLO+1,0,51
 Paste Bob Screen Width-1-LARGHEZZAPANNELLO+1,128,52
End Proc
Procedure MOSTRALEPALLINERIMASTE
 PALLINERIMASTE=PALLINE-1
 CIFRA=PALLINERIMASTE mod 10
 Paste Bob 305,13,5+Asc(Str$(CIFRA)-" ")
 CIFRA=PALLINERIMASTE/10 mod 10
 Paste Bob 289,13,5+Asc(Str$(CIFRA)-" ")
 CIFRA=PALLINERIMASTE/100 mod 10
 Paste Bob 273,13,5+Asc(Str$(CIFRA)-" ")
End Proc
Procedure PULISCISOTTOILMATTONCINODIPOTENZIAMENTO[XMATTONCINO,YMATTONCINO]
 MATTONCINODARIDISEGNARE=Zone(XMATTONCINO,YMATTONCINO)
 If MATTONCINODARIDISEGNARE>0
  If MATTONCINODARIDISEGNARE mod 13=12
   Gosub CANCELLAILMATTONCINO
  Else 
   Gosub CANCELLAILMATTONCINO
   Inc MATTONCINODARIDISEGNARE
   Gosub CANCELLAILMATTONCINO
  End If 
 End If 
 Pop Proc
 CANCELLAILMATTONCINO:
 If MATTONCINO(MATTONCINODARIDISEGNARE-1)=0
  Ink 0 : Bar X0ZONA(MATTONCINODARIDISEGNARE-1),Y0ZONA(MATTONCINODARIDISEGNARE-1) To X0ZONA(MATTONCINODARIDISEGNARE-1)+19,Y0ZONA(MATTONCINODARIDISEGNARE-1)+9
 End If 
End Proc
Procedure PULISCISOTTOILRAGGIOLASER[XMATTONCINO,YMATTONCINO]
 MATTONCINODARIDISEGNARE=Zone(XMATTONCINO,YMATTONCINO)
 If MATTONCINODARIDISEGNARE>0
  If MATTONCINO(MATTONCINODARIDISEGNARE-1)=0
   Ink 0 : Bar X0ZONA(MATTONCINODARIDISEGNARE-1),Y0ZONA(MATTONCINODARIDISEGNARE-1) To X0ZONA(MATTONCINODARIDISEGNARE-1)+19,Y0ZONA(MATTONCINODARIDISEGNARE-1)+9
  End If 
 End If 
End Proc
Procedure SUONODAESEGUIRE
 SUONOESEGUITO=SUONODAESEGUIRE(0)
 For S=1 To 3
  SUONODAESEGUIRE(S-1)=SUONODAESEGUIRE(S)
 Next S
 SUONODAESEGUIRE(3)=SUONOESEGUITO
End Proc
Procedure TESTOGRAFICOCENTRATOOFATTOSCORRERE[STRINGA$,C0LORETESTO,C0LOREBORDO,ALTEZZAFONT,COPIASCHERMOZERO]
 If COPIASCHERMOZERO=VERO Then Get Block 1,0,0,320,256,0
 POSIZIONEPRECEDENTETESTO=1
 Repeat 
  POSIZIONETESTO=Instr(STRINGA$,Chr$(10),POSIZIONEPRECEDENTETESTO)
  POSIZIONEPRECEDENTETESTO=POSIZIONETESTO+1
  Inc LINEETESTO
 Until POSIZIONETESTO=0
 If LINEETESTO=1
  Put Block 1
  XTESTO=(Screen Width-Text Length(STRINGA$))/2
  YTESTO=(Screen Height-ALTEZZAFONT)/2+Text Base
  Gr Writing 0
  Ink C0LOREBORDO : Text XTESTO,YTESTO-1,STRINGA$
  Text XTESTO+1,YTESTO-1,STRINGA$
  Text XTESTO+1,YTESTO,STRINGA$
  Text XTESTO+1,YTESTO+1,STRINGA$
  Text XTESTO,YTESTO+1,STRINGA$
  Text XTESTO-1,YTESTO+1,STRINGA$
  Text XTESTO-1,YTESTO,STRINGA$
  Text XTESTO-1,YTESTO-1,STRINGA$
  Ink C0LORETESTO : Text XTESTO,YTESTO,STRINGA$
  Gr Writing 1
 Else 
  Dim TESTO$(LINEETESTO-1)
  LINEETESTO=0
  POSIZIONEPRECEDENTETESTO=1
  Repeat 
   POSIZIONETESTO=Instr(STRINGA$,Chr$(10),POSIZIONEPRECEDENTETESTO)
   If POSIZIONETESTO=0
    TESTO$(LINEETESTO)=Right$(STRINGA$,Len(STRINGA$)-POSIZIONEPRECEDENTETESTO+1)
   Else 
    TESTO$(LINEETESTO)=Mid$(STRINGA$,POSIZIONEPRECEDENTETESTO,POSIZIONETESTO-POSIZIONEPRECEDENTETESTO)
   End If 
   POSIZIONEPRECEDENTETESTO=POSIZIONETESTO+1
   Inc LINEETESTO
  Until POSIZIONETESTO=0
  NUMEROMASSIMOLINEENELLOSCHERMO=Screen Height/ALTEZZAFONT
  If LINEETESTO>NUMEROMASSIMOLINEENELLOSCHERMO
   Put Block 1
   ALTEZZATESTO=(Screen Height-ALTEZZAFONT*NUMEROMASSIMOLINEENELLOSCHERMO)/2
   For LINEA=0 To NUMEROMASSIMOLINEENELLOSCHERMO-1
    XTESTO=(Screen Width-Text Length(TESTO$(LINEA)))/2
    YTESTO=ALTEZZATESTO+ALTEZZAFONT*LINEA+Text Base
    Gr Writing 0
    Ink C0LOREBORDO : Text XTESTO,YTESTO-1,TESTO$(LINEA)
    Text XTESTO+1,YTESTO-1,TESTO$(LINEA)
    Text XTESTO+1,YTESTO,TESTO$(LINEA)
    Text XTESTO+1,YTESTO+1,TESTO$(LINEA)
    Text XTESTO,YTESTO+1,TESTO$(LINEA)
    Text XTESTO-1,YTESTO+1,TESTO$(LINEA)
    Text XTESTO-1,YTESTO,TESTO$(LINEA)
    Text XTESTO-1,YTESTO-1,TESTO$(LINEA)
    Ink C0LORETESTO : Text XTESTO,YTESTO,TESTO$(LINEA)
    Gr Writing 1
   Next LINEA
   Wait 25*NUMEROMASSIMOLINEENELLOSCHERMO
   LINEA=1
   Repeat 
    Put Block 1
    For LINEANELLOSCHERMO=0 To NUMEROMASSIMOLINEENELLOSCHERMO-1
     XTESTO=(Screen Width-Text Length(TESTO$(LINEA+LINEANELLOSCHERMO)))/2
     YTESTO=ALTEZZATESTO+ALTEZZAFONT*LINEANELLOSCHERMO+Text Base
     Gr Writing 0
     Ink C0LOREBORDO : Text XTESTO,YTESTO-1,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO+1,YTESTO-1,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO+1,YTESTO,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO+1,YTESTO+1,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO,YTESTO+1,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO-1,YTESTO+1,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO-1,YTESTO,TESTO$(LINEA+LINEANELLOSCHERMO)
     Text XTESTO-1,YTESTO-1,TESTO$(LINEA+LINEANELLOSCHERMO)
     Ink C0LORETESTO : Text XTESTO,YTESTO,TESTO$(LINEA+LINEANELLOSCHERMO)
     Gr Writing 1
    Next LINEANELLOSCHERMO
    Wait 25
    Inc LINEA
   Until LINEA+LINEANELLOSCHERMO=LINEETESTO
  Else 
   Put Block 1
   ALTEZZATESTO=(Screen Height-ALTEZZAFONT*LINEETESTO)/2
   For LINEA=0 To LINEETESTO-1
    XTESTO=(Screen Width-Text Length(TESTO$(LINEA)))/2
    YTESTO=ALTEZZATESTO+ALTEZZAFONT*LINEA+Text Base
    Gr Writing 0
    Ink C0LOREBORDO : Text XTESTO,YTESTO-1,TESTO$(LINEA)
    Text XTESTO+1,YTESTO-1,TESTO$(LINEA)
    Text XTESTO+1,YTESTO,TESTO$(LINEA)
    Text XTESTO+1,YTESTO+1,TESTO$(LINEA)
    Text XTESTO,YTESTO+1,TESTO$(LINEA)
    Text XTESTO-1,YTESTO+1,TESTO$(LINEA)
    Text XTESTO-1,YTESTO,TESTO$(LINEA)
    Text XTESTO-1,YTESTO-1,TESTO$(LINEA)
    Ink C0LORETESTO : Text XTESTO,YTESTO,TESTO$(LINEA)
    Gr Writing 1
   Next LINEA
  End If 
 End If 
End Proc
Procedure T0GLIILPANNELLO
 For Y=255 To 0 Step -1
  Ink 0 : Draw Screen Width-1-LARGHEZZAPANNELLO+1,Y To 320,Y : Wait Vbl 
 Next Y
End Proc
Procedure T0GLIIMATTONCINI
 For M=246 To 0 Step -1
  If M mod 13=12
   Cls 0,X0ZONA(M),Y0ZONA(M) To X0ZONA(M)+20,Y0ZONA(M)+11
  Else 
   Cls 0,X0ZONA(M),Y0ZONA(M) To X0ZONA(M)+21,Y0ZONA(M)+11
  End If 
  Wait Vbl 
 Next M
End Proc
Procedure T0GLILARCOBALENO
 For ARCOBALENO=270 To 0 Step -1
  Rainbow 0,257,0,ARCOBALENO
  Wait Vbl 
 Next ARCOBALENO
 Rainbow Del 0
End Proc
Procedure T0GLILARIGA
 If XRIGA>0
  If T0GLILARIGA=1
   Bob OGGETTORIGAUNO,XRIGA,251,OGGETTORIGAUNO
  Else If T0GLILARIGA=2
   Bob OGGETTORIGADUE,XRIGA,251,OGGETTORIGADUE
  Else If T0GLILARIGA=3
   Bob OGGETTORIGATRE,XRIGA,251,OGGETTORIGATRE
  End If 
 Else 
  If T0GLILARIGA=1
   Bob Off OGGETTORIGAUNO
  Else If T0GLILARIGA=2
   Bob Off OGGETTORIGADUE
  Else If T0GLILARIGA=3
   Bob Off OGGETTORIGATRE
  End If 
 End If 
End Proc
Procedure TROVAILFONTDATA70
 Get Disc Fonts 
 FONTTROVATO=-1
 For FONT=0 To 1024
  If Left$(Font$(FONT),30)-" "="Data70.font" Then FONTTROVATO=FONT : Exit 
 Next FONT
 If FONTTROVATO>-1
  Set Font FONTTROVATO
  ALTEZZAFONT=Val(Mid$(Font$(FONTTROVATO),31,2))
 Else 
  ALTEZZAFONT=8
 End If 
End Proc
